#pragma once
#include <functional>
#include <memory>
#include <string>
#include <system_error>

namespace uds_model {

/* ================ 服务端回调类型 ================ */
using OnLine = std::function<void(int client_fd, std::string line)>;
using OnConnect = std::function<void(int client_fd)>;
using OnDisconnect = std::function<void(int client_fd)>;

/* ---------- 服务端接口 ---------- */
class Server {
public:
    explicit Server(const std::string& sock_path);
    ~Server();

    // 运行服务（阻塞）
    void run();

    // 停止服务
    void stop();

    // 设置回调：收到一行数据
    void set_on_line(OnLine cb);
    
    // 设置回调：客户端连接成功
    void set_on_connected(OnConnect cb);
    
    // 设置回调：客户端断开连接
    void set_on_disconnected(OnDisconnect cb);

private:
    class Impl;
    std::unique_ptr<Impl> pImpl;
};
}
